aggregations in mongodb | اگریگیشن ها در مونگو

aggregations in mongodb | اگریگیشن ها در مونگو

عملیات Aggregation  چندین سند را پردازش کرده و نتایج محاسبه شده را برمی گرداند. می توانید از عملیات Aggregation   برای موارد زیر استفاده کنید:
 
مقادیر چندین سند  را با هم گروه بندی کنید.
برای برگرداندن یک نتیجه واحد، عملیات روی داده های گروه بندی شده انجام دهید.
تغییرات داده ها را در طول زمان تجزیه و تحلیل کنید.
 
MongoDB سه روش مختلف برای انجام تجمیع ارائه می دهد:

The aggregation pipeline.
The map-reduce function.
Single purpose aggregation methods.
 

Pipeline Concept

در دستور یونیکس shell pipeline به معنای امکان اجرای عملیات بر روی برخی از ورودی ها و استفاده از خروجی به عنوان ورودی برای دستور بعدی و غیره است. MongoDB نیز از همین مفهوم در چارچوب aggregation  پشتیبانی می کند. مجموعه‌ای از مراحل ممکن وجود دارد و هر یک از آن‌ها به عنوان مجموعه‌ای از اسناد به عنوان ورودی در نظر گرفته می‌شوند و مجموعه‌ای از اسناد حاصل (یا سند نهایی JSON حاصل در انتهای pipeline ) را تولید می‌کنند. این به نوبه خود می تواند برای مرحله بعدی و غیره استفاده شود.

MongoDB شما را قادر می سازد تا عملیات aggregation  را از طریق مکانیزمی به نام aggregation pipelines انجام دهید. اینها به عنوان یک سری متوالی از عملیات پردازش داده های اعلامی ساخته شده اند که به عنوان stages شناخته می شوند. هر stage  اسناد را هنگام عبور از خط لوله بازرسی و تبدیل می کند و نتایج تبدیل شده را به stage بعدی برای پردازش بیشتر می رساند. اسناد یک مجموعه انتخاب شده وارد pipeline  می شوند و از هر stage  عبور می کنند، جایی که خروجی حاصل از یک مرحله، ورودی مرحله بعدی را تشکیل می دهد و نتیجه نهایی در انتهای خط لوله می آید.
 
stage ها می توانند عملیات هایی را روی داده ها انجام دهند مانند:

filtering : شبیه پرس و جوهایی است که در آن فهرست اسناد از طریق مجموعه ای از معیارها محدود می شود.
sorting: می توانید اسناد را بر اساس یک فیلد انتخابی دوباره مرتب کنید.
transforming : امکان تغییر ساختار اسناد به این معنی است که می توانید برخی از فیلدها را حذف یا تغییر نام دهید، یا شاید نام یا گروه فیلدها را در یک سند تعبیه شده برای خوانایی تغییر دهید.
grouping: همچنین می توانید چندین سند را با هم پردازش کنید تا یک نتیجه خلاصه شده را تشکیل دهید.
 
stages : هر stage شروع می شود از عملگرهای stage که عبارتند از:
$match: برای فیلتر کردن اسناد استفاده می شود و می تواند مقدار اسنادی را که به عنوان ورودی به مرحله بعد داده می شود کاهش دهد.
$project: برای انتخاب برخی از فیلدهای خاص از یک مجموعه استفاده می شود.
$group: برای گروه بندی اسناد بر اساس مقداری استفاده می شود.
$sort: برای مرتب کردن سندی که آنها را مرتب می کند استفاده می شود
$skip: برای رد کردن n تعداد سند و ارسال اسناد باقی مانده استفاده می شود
$limit: برای ارسال n شماره اول اسناد استفاده می شود و بنابراین آنها را محدود می کند.
$unwind: برای باز کردن اسنادی که از array ها استفاده می‌کنند استفاده می‌شود.
$out: برای نوشتن اسناد به دست آمده در یک مجموعه جدید استفاده می شود.

 
Expressions : به نام فیلد در اسناد ورودی برای مثال اشاره دارد. { $group : { _id : “$id“, total:{$sum:”$fare“}}} در اینجا $id و $fare عباراتی هستند.
Accumulators : اینها اساساً در group stage استفاده می شوند
sum: مقادیر عددی اسناد هر گروه را جمع می کند
count: تعداد کل اسناد را می شمارد
avg: میانگین تمام مقادیر داده شده را از تمام اسناد محاسبه می کند
min: حداقل مقدار را از تمام اسناد دریافت می کند
max: حداکثر مقدار را از تمام اسناد دریافت می کند
first: اولین سند را از گروه بندی دریافت می کند
last: آخرین سند را از گروه بندی دریافت می کند

 

Map Reduce

Map Reduce برای جمع آوری نتایج برای حجم زیاد داده استفاده می شود.
Map Reduce دو کارکرد اصلی دارد یکی Map است که تمام اسناد را گروه بندی می کند
و دومی reduce است که عملیات روی داده های گروه بندی شده را انجام می دهد.

 

 

Single Purpose Aggregation ( تجمیع تک هدفی )

methods های تجمیع تک منظوره،  اسناد را از یک مجموعه واحد جمع می کند. method ها ساده هستند اما فاقد قابلیت های aggregation pipeline  هستند. تعداد تقریبی اسناد موجود در یک collection یا یک view را برمی‌گرداند. شمارشی از تعداد اسناد موجود در یک collection یا یک view را برمی‌گرداند.
در تجمیع تک منظوره، تنها یک فیلتر برای محاسبه نتیجه اعمال می شود.
در MongoDB ما سه نوع عملیات aggregation  برای یک single filtration داریم:

db.collection.estimatedDocumentCount()
db.collection.count()
db.collection.distinct()
 
 
 
 
منابع:
نویسنده :
مجید پورداود
  • مجید پورداود
  • مهندس نرم افزار و تحلیلگر ارشد سیستم های کامپیوتری تحت وب می باشم. از سال 1395 برنامه نویسی را شروع کردم و به زبان های php (فریم ورک laravel -codeigniter)  و زبان جاوا اسکریپت (فریم ورک express.js-nest.js)  تسلط دارم.  

ثبت دیدگاه جدید

0 دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *